import jwt from "jsonwebtoken"
import crypto from "crypto"

import userModel from '../../model/userModel.js'

import config from '../../config.js'

async function login(ctx) {
    // 合并build和save方法
    if (!ctx.query.name) {
        return ['请输入用户名']
    }
    if (!ctx.query.pwd) {
        return ['请输入密码']
    }
    let users = await userModel.findOne({
        where: {
            name: ctx.query.name,
        },
        attributes: ["id", 'name', "level", 'pwd']
    });
    if (!users) {
        return ["登录失败"]
    }
    const hashPwd = crypto.createHmac('sha256', config.secret)
        .update(ctx.query.pwd)
        .digest('hex');

    console.log(hashPwd);

    console.log(users.pwd);

    if (hashPwd == users.pwd) {
        delete users.dataValues.pwd;
        var token = jwt.sign({ user: users }, config.secret);
        return ["登录", 1, { token, users: users.dataValues, hashPwd }]
    } else {
        return ["密码错误", 0, hashPwd]
    }


    // await user.save();//再次更新
    // await user.save({ fields: ['name'] });//仅更新部分字段
    // await user.destroy();//删除实例
    // await user.reload();重新从数据库读取

    // const incrementResult = await user.increment('level', { by: 2 });//递增
    // const incrementResult = await user.decrement('level', { by: 2 });// 递减
    // return users;

}
async function register(ctx) {
    try {
        // 合并build和save方法
        if (!ctx.query.name) {
            return ['请输入用户名']
        }
        if (!ctx.query.pwd) {
            return ['请输入密码']
        }
        const hashPwd = crypto.createHmac('sha256', config.secret)
            .update(ctx.query.pwd)
            .digest('hex');

        // 合并build和save方法
        let user = await userModel.create({
            name: ctx.query.name,
            pwd: hashPwd,
        });
        return ['成功', 1, user.toJSON()];
    } catch (err) {
        return [err.name || "未知错误", 0];
    }
}

async function deleteUser(ctx) {
    try {
        // 合并build和save方法
        if (ctx.user.level != 1) {
            return ['权限不足', 0];
        }
        if (!ctx.query.id) {
            return ['未指定用户', 0];
        }

        let user = await userModel.destroy({
            where: {
                id: ctx.query.id,
            }
        });
        return ['成功', 1, user.toJSON()];
    } catch (err) {
        return [err.name || "未知错误", 0];
    }
}

export default {
    login,
    register,
    deleteUser
}